package com.itheima.properties;

import java.io.*;
import java.util.*;

public class Demo2 {
    /*
    案例需求
    在Properties文件中手动写上姓名和年龄,读取到集合中,将该数据封装成学生对象,写到本地文件
    实现步骤
- 创建Properties集合,将本地文件中的数据加载到集合中
- 获取集合中的键值对数据,封装到学生对象中
- 创建序列化流对象,将学生对象序列化到本地文件中
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Properties prop = new Properties();
        BufferedReader br = new BufferedReader(new FileReader("test_io流\\student.properties"));
        prop.load(br);
        br.close();
        System.out.println(prop);

        /*readObject():
     读取到文件的末尾 直接抛出异常
     如果要序列化的对象有多个,不建议直接将多个对象序列化到文件中,因为反序列化时容易出异常
     建议: 将要序列化的多个对象存储到集合中,然后将集合序列化到文件中*/
        ArrayList<Student> student = new ArrayList<>();
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test_io流\\a.txt"));
        Set<String> stu = prop.stringPropertyNames();
        for (String name : stu) {
            String age = prop.getProperty(name);
            Student s = new Student(name, Integer.parseInt(age));
            student.add(s);
        }
        oos.writeObject(student);
        oos.close();

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test_io流\\a.txt"));
        //System.out.println(ois.readObject());
        Object obj = ois.readObject();//读取到的是集合
        student = (ArrayList<Student>) obj;//将读取到的对象向下转型为集合类型
        for (Student s : student) {
            System.out.println(s.getName() + "..." + s.getAge());
        }
        ois.close();

        //1.创建Properties集合,将本地文件中的数据加载到集合中
/*        Properties prop = new Properties();
        FileReader fr = new FileReader("test_io流\\student.properties");
        prop.load(fr);
        fr.close();
        //2.获取集合中的键值对数据,封装到学生对象中
        String name = prop.getProperty("name");
        int age = Integer.parseInt(prop.getProperty("age"));
        Student s = new Student(name,age);
        System.out.println(s);
        //3.创建序列化流对象,将学生对象序列化到本地文件中
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("b.txt"));
        oos.writeObject(s);
        oos.close();*/
    }
}
